package com.davidlife.controller;

import com.davidlife.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/start")  //注意这里放在类上：表示请求URL的第一级访问目录。此处不写的话，就相当于应用的根目录。写的话需要以/开头。
public class HelloController {
    /*
    RequestMapping注解:
        作用：用于建立请求URL和处理请求方法之间的对应关系。
        放在类上：请求URL的第一级访问目录。此处不写的话，就相当于应用的根目录。写的话需要以/开头。
            它出现的目的是为了使我们的URL可以按照模块化管理，用来表示一个具体的模块:
            例如：账户模块：/account/add； 订单模块：/order/add
                  @RequestMapping("/account"); @RequestMapping("/update")
        放在方法上：请求URL的第二级访问目录。
            如：@RequestMapping("/add"); @RequestMapping("/update")
     */
    @RequestMapping(path = "hello/{id}", method = RequestMethod.GET, params = {"username", "age!=100"})
    //params = {"username"}，表示请求参数必须有accountName;params = {"age!=100}，表示请求参数中age不能是100。
    //PathVaribale：用于绑定url中的占位符。restful编程风格：
    public String sayHello(@PathVariable Integer id, String username, String password, @RequestParam(value = "age", required = false) Integer uage) {  //传递基本数据类型和字符串类型作为参数
        System.out.println("恭喜，入门成功！");
        System.out.println("Parh Variable id: " + id);
        System.out.println("username: " + username + ", password: " + password + ", age: " + uage);
        return "success";
    }

    @RequestMapping(value = "save", method = RequestMethod.POST)
    public String saveUser(User user) {  //传递实体类型类型作为参数
        System.out.println(user);
        return "success";
    }

    //用@RequestBody提取请求体中的json数据，并封装到实体对象中。
    //json到实体类的封装或实体类到json的转换只需导入jackson的那几个包就行，spring会自动使用其中的转换工具
    @RequestMapping(value = "testResponseJson", method = RequestMethod.POST)
    public @ResponseBody
    User testResponseJson(@RequestBody User user) {
        System.out.println(user);
        return user;
    }
}
